一覧に戻る

NSDictionaryで構成されるNSArrayのソートについて

#Objective-C#iPhone#Xcode#iOS#Swift

PlistをNSArrayとして読み込む、というのはよくある事だと思います。 その場合、NSArrayの要素がNSDictionaryになる事があります。 この時に、NSArrayをNSDictionaryのKeyの値ごとにソートする方法について投稿します。

NSArray型の配列aryを、aryの各要素であるNSDictionaryのkeyである"foo"で取得出来る値によってソートする場合について記述します。

let sortDescription = NSSortDescriptor(key: "foo", ascending: false)
let sortDescAry = [sortDescription]
ary = ary.sortedArrayUsingDescriptors(sortDescAry) as NSArray

このように書きます。 配列の順番が変更されますが、NSArrayでOKです。 NSSortDescriptorはさらに引数としてselector:やcomparator:を渡す事も出来、ソート条件を指定出来るようですが、ここは私には何がなんだかわかりません。ご存知の方がいらっしゃれば、指定の仕方など教えて下さい。

で、この様に書けば日本語でもソート出来ます。ただ、注意点としては、NSDictionaryに数字が文字列として格納されている場合は、思った通りにソートされません。 具体的には、100よりも99の方が後に来ます。要は文字列なので辞書式になってしまうんですね。 ちゃんとNSDictionaryに数値として格納すれば、これもちゃんとソートしてくれます。 こんな都合のよい関数があるなんて…